// ============================== 导入依赖 ============================== //

import IS from './is'

// ============================== 导出键名工具 ============================== //

export default {
  /**
   * 键名 (首字母小写 + 下杠小写转大写 + 下杠大写转小写)
   *
   * @param {String} key 原始键名 Some_user_Name
   *
   * @returns {String} 键名 someUsername
   */
  key(key) {
    if (!IS.isString(key)) return ''
    return key.replace(/^([A-Z])/, (result, $1) => $1.toLowerCase())
      .replace(/_([a-z])/g, (result, $1) => $1.toUpperCase())
      .replace(/_([A-Z])/g, (result, $1) => $1.toLowerCase())
  },

  /**
   * 键名首字母大写后加前缀 (pre 为空时等于首字母大写)
   *
   * @param {String} key 原始键名 Some_user_Name
   * @param {String} prefix 前缀串
   * @param {String} suffix 后缀串
   *
   * @returns {String} 前缀键名 preSomeUsername
   */
  keyPre(key, prefix = '', suffix = '') {
    const Key = this.key(key).replace(/^([a-z])/, (result, $1) => $1.toUpperCase())
    return `${prefix}${Key}${suffix}`
  },
}
